package com.initialize.common.tool.util;

import com.initialize.common.tool.md5.MD5;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.Date;
import java.util.Objects;

/**
 * Created with IntelliJ IDEA.
 * User: jane
 * Date: 2019/12/27
 * Time: 1:11 下午
 * Description:
 */
public class FileTool {
    /**
     * 接收到前端的文件进行类型转换
     *
     * @param multipartFile
     * @return
     * @throws IOException
     */
    public static File MultipartFileToFile(MultipartFile multipartFile) throws IOException {
        File toFile;
        if (!multipartFile.equals("") && multipartFile.getSize() > 0) {
            InputStream ins;
            ins = multipartFile.getInputStream();
            toFile = new File(Objects.requireNonNull(multipartFile.getOriginalFilename()));
            OutputStream os = new FileOutputStream(toFile);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
            return initializationFileName(toFile);
        }
        return null;
    }
    /**
     * 初始化文件名称
     * 放出出现相同的文件 导致对象存储覆盖
     *
     * @param toFile
     * @return
     */
    private static File initializationFileName(File toFile) {
        //获取文件名
        String oldFileName = toFile.getName();
//            把文件名放到stringBuffer
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(oldFileName);
//            拼接4位随机数
        String sjNum = RandomTool.getSJNum();
        stringBuilder.append(sjNum);
//            拼接时间戳
        Date date = new Date();
        stringBuilder.append(date);
//            获取文件格式
        String fileType = oldFileName.substring(oldFileName.lastIndexOf("."));
//            使用MD5产生文件名。之后加上文件格式拼接出完整的文件名
        String newFileName = MD5.md5(stringBuilder.toString()) + fileType;
        //构造出文件
        File temp = new File(newFileName);

        toFile.renameTo(temp);
        return temp;
    }
}